﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Reflection;
using Oracle.DataAccess.Client;

namespace Petaframe.DataAccess
{

    /// <summary>
    /// Veritabanı işlemleri için kullanılacak olan parametrelere ait bilgileri oluşturur.
    /// </summary>
    public class ParameterInfo 
    {
        /// <summary>
        /// Property değerlerini hızlı bir şekilde okumak için kullanılan delege.
        /// </summary>
        //[ThreadStatic]
        public static Func<PropertyInfo, object, object> GetParameterValue = (pi, poco) => pi.GetValue(poco, null);

        /// <summary>
        /// Veritabanına özel bir ön ek varsa bu ön ek olmadan verilen isim.Örneğin Oracle da parametere isimleri 
        /// sql komutu içinde :customerID ile yazılırken , OracleCommand parametrelerine eklerken bu parametre ismi customerID şeklinde olur.
        /// Bu durumda bu property customerID değerini alır.
        /// </summary>
        public string ParameterSimpleName { get; set; }

        /// <summary>
        /// İlgili propertye ait GUID ile birleştirilmiş özel isim. Örneğin parametre adı  p12aW456 şeklindedir.
        /// </summary>
        public string ParameterUniqueName { get; set; }

        /// <summary>
        /// Parametrenin sorgu içindeki sıra numarası.
        /// </summary>
        public int ParameterPosition { get; set; }    

        /// <summary>
        /// Parametrenin temsil ettiği sütun adı. Örn Kisi_Adi, Toplam_Tutar 
        /// </summary>
        public string ParameterColumnName { get; set; }    

        //public DbParameter DbParameter { get; set; }      

        //public OracleParameter OracleParameter {get; set;}

        public DbParameter DatabaseParameter { get; set; }
    }
}
